home *** CD-ROM | disk | FTP | other *** search
/ Aminet 21 / Aminet 21 (1997)(GTI - Schatztruhe)[!][Oct 1997].iso / Aminet / util / sys / ReqCh.lha / ReqCh / ReqCh.s < prev    next >
Text File  |  1997-07-31  |  9KB  |  449 lines

  1. *****************************************************************************
  2. *                                        *
  3. *    PROGRAM: ReqCh     (a replacement for RequestChoice)            *
  4. *    VERSION: 40.2                                *
  5. *   SOURCE CODE: 8                                *
  6. *       DATE: 23.10.1996 - 31.07.1997                    *
  7. *      LANGUAGE: Assembler                            *
  8. *     SYSTEM: A1200  KS 40.68 WB 40.42 2MB chip 8MB fast 68030/50mhz        *
  9. *                                        *
  10. *     AUTHOR: Joerg Riemer 14167 Berlin/SchottmuellerStr.107/Germany        *
  11. *      EMAIL: mission@cs.tu-berlin.de                    *
  12. *                                        *
  13. *      FUNCTION: ReqCh lets AmigaDOS and ARexx scripts use the            *
  14. *         Intuition EasyRequest() feature. It is a replacement        *
  15. *         for the bugy command C:RequestChoice (new for [V39])        *
  16. *         Read the ReqCh.doc for more information.            *
  17. *                                        *
  18. *  NEW FEATURES: creates a local variable called "ReqChGG" to hold        *
  19. *         the gadget number selected by the user                *
  20. *                                        *
  21. *    -------------------------------------------------------------        *
  22. *                                        *
  23. *      40.2 - fixed reentrancy problem                    *
  24. *                                        *
  25. *      40.1 - added locale variable "ReqChGG"                *
  26. *           - allocvec(); readargs() fixed unfreed memory            *
  27. *                                        *
  28. *    -------------------------------------------------------------        *
  29. *                                        *
  30. *****************************************************************************
  31.  
  32.         SECTION    ReqCh,CODE
  33.  
  34. *****************************************************************************
  35.  
  36. Start        link.w    A5,#-$68
  37.         movem.l    D2/D3/D5-D7/A2/A3/A6,-(SP)
  38.  
  39.         movea.w    #4,A0
  40.         movea.l    (A0),A2
  41.         movea.l    A2,A0
  42.         moveq    #ERROR_INVALID_RESIDENT_LIBRARY,D7
  43.         moveq    #RETURN_FAIL,D6
  44.         move.l    A0,($32,SP)
  45.         move.l    A6,-(SP)
  46.         lea    (DOSName,PC),A1
  47.         moveq    #37,D0
  48.         movea.l    A2,A6
  49.         jsr    (_LVOOpenLibrary,A6)
  50.         movea.l    (SP)+,A6
  51.         movea.l    D0,A3
  52.         movea.l    A3,A0
  53.         move.l    A0,($2E,SP)
  54.         move.l    A3,D0
  55.         beq.w    LC3C8
  56.  
  57.         move.l    A6,-(SP)
  58.         lea    (INTName,PC),A1
  59.         moveq    #37,D0
  60.         movea.l    A2,A6
  61.         jsr    (_LVOOpenLibrary,A6)
  62.         movea.l    (SP)+,A6
  63.         move.l    D0,($2A,SP)
  64.         tst.l    D0
  65.         beq.w    LC39A
  66.  
  67.         moveq    #15,D1
  68.         moveq    #0,D2
  69.         lea    (-$24,A5),A0
  70. LC058        move.b    D2,(A0)+
  71.         dbra    D1,LC058
  72.         move.l    A6,-(SP)
  73.         lea    (ArgTemplate,PC),A0
  74.         move.l    A0,D1
  75.         lea    (-$24,A5),A1
  76.         move.l    A1,D2
  77.         moveq    #0,D3
  78.         movea.l    A3,A6
  79.         jsr    (_LVOReadArgs,A6)
  80.         movea.l    (SP)+,A6
  81.  
  82.         move.l    D0,(-$14,A5)        ;save ptr (args)
  83.         beq.w    LC364
  84.  
  85.         moveq    #ERROR_REQUIRED_ARG_MISSING,D7
  86.  
  87.         movea.l    (-$20,A5),A3
  88.         movea.l    A3,A0
  89.         movea.l    (-$1C,A5),A2
  90.         move.l    A0,($20,SP)
  91.         move.l    A2,D0
  92.         beq.w    LC370
  93.         tst.l    (A2)
  94.         beq.w    LC370
  95.  
  96.         movea.l    A3,A1
  97. LC0A0        tst.b    (A1)+
  98.         bne.b    LC0A0
  99.         subq.l    #1,A1
  100.         suba.l    A3,A1
  101.         move.l    A1,D0
  102.         move.w    D0,(-$3E,A5)
  103.         bra.b    LC0FA
  104.  
  105. LC0B0        movea.l    A3,A0
  106. LC0B2        tst.b    (A0)+
  107.         bne.b    LC0B2
  108.         subq.l    #1,A0
  109.         suba.l    A3,A0
  110.         move.l    A0,D0
  111.         addq.l    #1,D0
  112.         moveq    #0,D1
  113.         move.w    (-$3E,A5),D1
  114.         add.l    D0,D1
  115.         clr.w    (-$40,A5)
  116.         move.w    D1,(-$3E,A5)
  117.         bra.b    LC0EC
  118.  
  119. LC0D0        move.w    (-$40,A5),D0
  120.         move.l    D0,D1
  121.         addq.w    #1,D1
  122.         moveq    #0,D2
  123.         move.w    D0,D2
  124.         move.w    D1,(-$40,A5)
  125.         moveq    #$25,D0
  126.         cmp.b    (A3,D2.L),D0
  127.         bne.b    LC0EC
  128.         addq.w    #1,(-$3E,A5)
  129. LC0EC        moveq    #0,D0
  130.         move.w    (-$40,A5),D0
  131.         tst.b    (A3,D0.L)
  132.         bne.b    LC0D0
  133.         addq.l    #4,A2
  134. LC0FA        movea.l    (A2),A3
  135.         move.l    A3,D0
  136.         bne.b    LC0B0
  137.         clr.w    (-$40,A5)
  138.         movea.l    ($20,SP),A3
  139.         bra.b    LC128
  140.  
  141. LC10A        move.w    (-$40,A5),D0
  142.         move.l    D0,D1
  143.         addq.w    #1,D1
  144.         moveq    #0,D2
  145.         move.w    D0,D2
  146.         move.w    D1,(-$40,A5)
  147.         moveq    #$25,D0
  148.         cmp.b    (A3,D2.L),D0
  149.         bne.b    LC128
  150.         move.l    D5,D0
  151.         move.w    D0,(-$3E,A5)
  152. LC128        moveq    #0,D0
  153.         move.w    (-$3E,A5),D0
  154.         move.l    D0,D5
  155.         addq.l    #1,D5
  156.         moveq    #0,D0
  157.         move.w    (-$40,A5),D0
  158.         tst.b    (A3,D0.L)
  159.         bne.b    LC10A
  160.  
  161.         moveq    #ERROR_NO_FREE_STORE,D7
  162.         move.l    A6,-(SP)
  163.         move.l    D5,D0
  164.         moveq    #0,D1
  165.         movea.l    ($36,SP),A6
  166.         jsr    (_LVOAllocVec,A6)
  167.         movea.l    (SP)+,A6
  168.         movea.l    D0,A2
  169.         movea.l    A2,A0
  170.         move.l    A0,($26,SP)
  171.         move.l    A2,D0
  172.         beq.w    LC370
  173.  
  174.         moveq    #0,D0
  175.         move.w    D0,(-$42,A5)
  176.         move.w    D0,(-$40,A5)
  177.         bra.b    LC1AA
  178.  
  179. LC16A        move.w    ($24,SP),D0
  180.         move.b    (A3),(A2)
  181.         move.w    (-$40,A5),D1
  182.         move.l    D1,D2
  183.         addq.w    #1,D2
  184.         movea.l    ($20,SP),A3
  185.         moveq    #0,D3
  186.         move.w    D1,D3
  187.         movea.l    ($26,SP),A2
  188.         move.w    D0,(-$42,A5)
  189.         movem.w    D2,(-$40,A5)
  190.         moveq    #$25,D0
  191.         cmp.b    (A3,D3.L),D0
  192.         bne.b    LC1AA
  193.         move.w    (-$42,A5),D1
  194.         move.l    D1,D2
  195.         addq.w    #1,D2
  196.         moveq    #0,D3
  197.         move.w    D1,D3
  198.         move.b    D0,(A2,D3.L)
  199.         move.w    D2,(-$42,A5)
  200. LC1AA        moveq    #0,D0
  201.         move.w    (-$40,A5),D0
  202.         adda.l    D0,A3
  203.         moveq    #0,D0
  204.         move.w    (-$42,A5),D0
  205.         adda.l    D0,A2
  206.         addq.w    #1,D0
  207.         move.w    D0,($24,SP)
  208.         tst.b    (A3)
  209.         bne.b    LC16A
  210.         move.w    ($24,SP),(-$42,A5)
  211.         clr.b    (A2)
  212.         movea.l    (-$1C,A5),A3
  213.         bra.b    LC238
  214.  
  215. LC1D2        clr.w    (-$40,A5)
  216.         bra.b    LC212
  217.  
  218. LC1D8        addq.w    #1,(-$42,A5)
  219.         move.b    (A3),(A2)
  220.         move.w    (-$40,A5),D0
  221.         move.l    D0,D1
  222.         addq.w    #1,D1
  223.         movea.l    ($20,SP),A3
  224.         moveq    #0,D2
  225.         move.w    D0,D2
  226.         movea.l    ($26,SP),A2
  227.         move.w    D1,(-$40,A5)
  228.         moveq    #$25,D0
  229.         cmp.b    (A3,D2.L),D0
  230.         bne.b    LC212
  231.         move.w    (-$42,A5),D1
  232.         move.l    D1,D2
  233.         addq.w    #1,D2
  234.         moveq    #0,D3
  235.         move.w    D1,D3
  236.         move.b    D0,(A2,D3.L)
  237.         move.w    D2,(-$42,A5)
  238. LC212        moveq    #0,D0
  239.         move.w    (-$40,A5),D0
  240.         adda.l    D0,A3
  241.         moveq    #0,D0
  242.         move.w    (-$42,A5),D0
  243.         adda.l    D0,A2
  244.         tst.b    (A3)
  245.         bne.b    LC1D8
  246.         movea.l    (-$3C,A5),A3
  247.         addq.l    #4,A3
  248.         tst.l    (A3)
  249.         beq.b    LC238
  250.         addq.w    #1,(-$42,A5)
  251.         move.b    #$7C,(A2)
  252. LC238        move.l    A3,(-$3C,A5)
  253.         movea.l    (A3),A3
  254.         movea.l    A3,A0
  255.         movea.l    ($26,SP),A2
  256.         move.l    A0,($20,SP)
  257.         move.l    A3,D0
  258.         bne.b    LC1D2
  259.         moveq    #0,D0
  260.         move.w    (-$42,A5),D0
  261.         clr.b    (A2,D0.L)
  262.  
  263.         movea.l    ($2A,SP),A3
  264.         moveq    #0,D0
  265.         move.l    D0,-(SP)
  266.         moveq    #1,D1
  267.         move.l    D1,-(SP)
  268.         move.l    #WA_RMBTrap,-(SP)
  269.         move.l    D1,-(SP)
  270.         move.l    #WA_NoCareRefresh,-(SP)
  271.         move.l    D1,-(SP)
  272.         move.l    #WA_Borderless,-(SP)
  273.         move.l    D1,-(SP)
  274.         move.l    #WA_Backdrop,-(SP)
  275.         moveq    #$1,D2
  276.         move.l    D2,-(SP)
  277.         move.l    #WA_Height,-(SP)
  278.         move.l    D2,-(SP)
  279.         move.l    #WA_Width,-(SP)
  280.         move.l    D0,-(SP)
  281.         move.l    #WA_Top,-(SP)
  282.         move.l    D0,-(SP)
  283.         move.l    #WA_Left,-(SP)
  284.         move.l    (-$18,A5),-(SP)
  285.         move.l    #WA_PubScreenName,-(SP)
  286.         move.l    A3,-(SP)
  287.         bsr.w    LC3D2
  288.         lea    ($50,SP),SP
  289.         move.l    D0,($20,SP)
  290.         tst.l    D0
  291.         beq.w    LC350
  292.  
  293.         moveq    #$14,D1
  294.         move.l    D1,(-$38,A5)
  295.         clr.l    (-$34,A5)
  296.         move.l    (-$24,A5),(-$30,A5)
  297.         move.l    A2,(-$2C,A5)
  298.         movea.l    A2,A0
  299.         moveq    #0,D1
  300.         move.w    ($24,SP),D1
  301.         adda.l    D1,A0
  302.         move.l    A0,(-$28,A5)
  303.  
  304.         movem.l    A2/A3/A6,-(SP)
  305.         movea.l    D0,A0
  306.         movea.l    A3,A6
  307.         lea    (-$38,A5),A1
  308.         suba.l    A2,A2
  309.         movea.l    A2,A3
  310.         jsr    (_LVOEasyRequestArgs,A6)
  311.         movem.l    (SP)+,A2/A3/A6
  312.  
  313.         move.l    D0,D7
  314.         moveq    #0,D6
  315.         move.l    D7,-(SP)
  316.         pea    (OutputString,PC)
  317.         pea    (-$52,A5)
  318.         jsr    (LC3F6,PC)
  319.         lea    (12,SP),SP
  320.  
  321.         move.l    A6,-(SP)
  322.  
  323.         lea    (-$52,A5),A0
  324.         move.l    A0,D1
  325.         movea.l    ($32,SP),A6
  326.         jsr    (_LVOPutStr,A6)
  327.  
  328.         lea    (VarName,PC),A0
  329.         move.l    A0,D1
  330.         lea    (-$52,A5),A0
  331.         move.l    A0,D2
  332.         moveq    #-1,D3
  333. LC32E        addq.l    #1,D3
  334.         cmpi.b    #10,(A0)+
  335.         bne.b    LC32E
  336.         move.l    #GVF_LOCAL_ONLY,D4
  337.         jsr    (_LVOSetVar,A6)
  338.  
  339.         movea.l    (SP)+,A6
  340.  
  341.         move.l    A6,-(SP)
  342.         movea.l    ($24,SP),A0
  343.         movea.l    A3,A6
  344.         jsr    (_LVOCloseWindow,A6)
  345.         movea.l    (SP)+,A6
  346.  
  347. LC350        movea.l    ($32,SP),A2
  348.         movea.l    ($26,SP),A1
  349.         move.l    A6,-(SP)
  350.         movea.l    A2,A6
  351.         jsr    (_LVOFreeVec,A6)
  352.         movea.l    (SP)+,A6
  353.         bra.b    LC370
  354.  
  355. *****************************************************************************
  356.  
  357. LC364        move.l    A6,-(SP)
  358.         movea.l    A3,A6
  359.         jsr    (_LVOIoErr,A6)
  360.         move.l    D0,D7
  361.         movea.l    (SP)+,A6
  362.  
  363. LC370        move.l    (-$14,A5),D1        ;get ptr (args)
  364.         beq.b    LC388
  365.         movea.l    ($2E,SP),A3
  366.         move.l    A6,-(SP)
  367.         movea.l    A3,A6
  368.         jsr    (_LVOFreeArgs,A6)
  369.         movea.l    (SP)+,A6
  370.  
  371. LC388        movea.l    ($32,SP),A2
  372.         movea.l    ($2A,SP),A1
  373.         move.l    A6,-(SP)
  374.         movea.l    A2,A6
  375.         jsr    (_LVOCloseLibrary,A6)
  376.         movea.l    (SP)+,A6
  377.  
  378. LC39A        tst.l    D6
  379.         beq.b    LC3BC
  380.  
  381.         movea.l    ($2E,SP),A3
  382.         move.l    A6,-(SP)
  383.         move.l    D7,D1
  384.         movea.l    A3,A6
  385.         jsr    (_LVOSetIoErr,A6)
  386.         movea.l    (SP)+,A6
  387.  
  388.         move.l    A6,-(SP)
  389.         move.l    D7,D1
  390.         moveq    #0,D2
  391.         movea.l    A3,A6
  392.         jsr    (_LVOPrintFault,A6)
  393.         movea.l    (SP)+,A6
  394.  
  395. LC3BC        move.l    A6,-(SP)
  396.         movea.l    A3,A1
  397.         movea.l    A2,A6
  398.         jsr    (_LVOCloseLibrary,A6)
  399.         movea.l    (SP)+,A6
  400.  
  401. LC3C8        move.l    D6,D0
  402.         movem.l    (SP)+,D2/D3/D5-D7/A2/A3/A6
  403.         unlk    A5
  404.         rts
  405.  
  406. *****************************************************************************
  407.  
  408. LC3D2        link.w    A5,#0
  409.         movem.l    A3/A6,-(SP)
  410.         movea.l    (8,A5),A3
  411.         move.l    A6,-(SP)
  412.         suba.l    A0,A0
  413.         lea    (12,A5),A1
  414.         movea.l    A3,A6
  415.         jsr    (_LVOOpenWindowTagList,A6)
  416.         movea.l    (SP)+,A6
  417.         movem.l    (SP)+,A3/A6
  418.         unlk    A5
  419.         rts
  420.  
  421. *****************************************************************************
  422.  
  423. LC3F6        movem.l    A2-A4/A6,-(SP)
  424.         movea.l    ($14,SP),A3
  425.         movea.l    ($18,SP),A0
  426.         lea    ($1C,SP),A1
  427.         lea    (LC41A,PC),A2
  428.         movea.l    (4).l,A6
  429.         jsr    (_LVORawDoFmt,A6)
  430.         movem.l    (SP)+,A2-A4/A6
  431.         rts
  432.  
  433. LC41A        move.b    D0,(A3)+
  434.         rts
  435.  
  436. *****************************************************************************
  437.  
  438. VarName        dc.b    "ReqChGG",0
  439. DOSName        dc.b    "dos.library",0
  440. INTName        dc.b    "intuition.library",0
  441. ArgTemplate    dc.b    "TITLE/A,BODY/A,GADGETS/M,PUBSCREEN/K",0,0
  442. OutputString    dc.b    "%ld",$A,0,0
  443.  
  444. *****************************************************************************
  445.         
  446. Version dc.b "$VER: reqch 40.2 (31.07.97) replacement for requestchoice",0
  447.  
  448. * eof ***********************************************************************
  449.